BNF for AddressListParser.jj

NON-TERMINALS

parseLine ::= address_list ( "\r" )? "\n"
parseAddressList0 ::= address_list <EOF>
parseAddress0 ::= address <EOF>
parseMailbox0 ::= mailbox <EOF>
address_list ::= ( address )? ( "," ( address )? )*
address ::= ( addr_spec | angle_addr | ( phrase ( group_body | angle_addr ) ) )
mailbox ::= ( addr_spec | angle_addr | name_addr )
name_addr ::= phrase angle_addr
group_body ::= ":" ( mailbox )? ( "," ( mailbox )? )* ";"
angle_addr ::= "<" ( route )? addr_spec ">"
route ::= "@" domain ( ( "," )* "@" domain )* ":"
phrase ::= ( <DOTATOM> | <QUOTEDSTRING> )+
addr_spec ::= ( local_part "@" domain )
local_part ::= ( <DOTATOM> | <QUOTEDSTRING> ) ( ( "." )? ( <DOTATOM> | <QUOTEDSTRING> ) )*
domain ::= ( ( <DOTATOM> ( ( "." )? <DOTATOM> )* ) | <DOMAINLITERAL> )